home *** CD-ROM | disk | FTP | other *** search
/ Sprite 1984 - 1993 / Sprite 1984 - 1993.iso / src / lib / include / bit.h < prev    next >
C/C++ Source or Header  |  1991-07-26  |  3KB  |  76 lines

  1. /*
  2.  * bit.h --
  3.  *
  4.  *    Definition of macros for setting and clearing bits in an array
  5.  *    of integers.
  6.  *
  7.  *    It is assumed that "int" is 32 bits wide.
  8.  *
  9.  * Copyright 1987, 1988 Regents of the University of California
  10.  * Permission to use, copy, modify, and distribute this
  11.  * software and its documentation for any purpose and without
  12.  * fee is hereby granted, provided that the above copyright
  13.  * notice appear in all copies.  The University of California
  14.  * makes no representations about the suitability of this
  15.  * software for any purpose.  It is provided "as is" without
  16.  * express or implied warranty.
  17.  *
  18.  * $Header: /sprite/src/lib/include/RCS/bit.h,v 1.5 91/07/26 17:13:33 mendel Exp $ SPRITE (Berkeley)
  19.  */
  20.  
  21. #ifndef _BIT
  22. #define _BIT
  23.  
  24. #ifndef _SPRITE
  25. #include "sprite.h"
  26. #endif
  27. #include <cfuncproto.h>
  28. #include <bstring.h>
  29.  
  30. #define BIT_NUM_BITS_PER_INT    32
  31. #define BIT_NUM_BITS_PER_BYTE    8
  32.  
  33. #define Bit_NumInts(numBits)    \
  34.     (((numBits)+BIT_NUM_BITS_PER_INT -1)/BIT_NUM_BITS_PER_INT)
  35.  
  36. #define Bit_NumBytes(numBits)    \
  37.     (Bit_NumInts(numBits) * sizeof(int))
  38.  
  39. #define Bit_Alloc(numBits, bitArrayPtr)      \
  40.         bitArrayPtr = (int *) malloc((unsigned) Bit_NumBytes(numBits)); \
  41.         Bit_Zero((numBits), (bitArrayPtr))
  42.  
  43. #define Bit_Free(bitArrayPtr)    \
  44.         free((char *)bitArrayPtr)
  45.  
  46. #define Bit_Set(numBits, bitArrayPtr) \
  47.     ((bitArrayPtr)[(numBits)/BIT_NUM_BITS_PER_INT] |= \
  48.         (1 << ((numBits) % BIT_NUM_BITS_PER_INT)))
  49.  
  50. #define Bit_IsSet(numBits, bitArrayPtr) \
  51.     ((bitArrayPtr)[(numBits)/BIT_NUM_BITS_PER_INT] & \
  52.         (1 << ((numBits) % BIT_NUM_BITS_PER_INT)))
  53.  
  54. #define Bit_Clear(numBits, bitArrayPtr) \
  55.     ((bitArrayPtr)[(numBits)/BIT_NUM_BITS_PER_INT] &= \
  56.         ~(1 << ((numBits) % BIT_NUM_BITS_PER_INT)))
  57.  
  58. #define Bit_IsClear(numBits, bitArrayPtr) \
  59.     (!(Bit_IsSet((numBits), (bitArrayPtr))))
  60.  
  61. #define Bit_Copy(numBits, srcArrayPtr, destArrayPtr) \
  62.     bcopy((char *) (srcArrayPtr), (char *) (destArrayPtr), \
  63.         Bit_NumBytes(numBits))
  64.  
  65. #define Bit_Zero(numBits, bitArrayPtr) \
  66.     bzero((char *) (bitArrayPtr), Bit_NumBytes(numBits))
  67.  
  68. extern int      Bit_FindFirstSet _ARGS_((int numBits, int *arrayPtr));
  69. extern int      Bit_FindFirstClear _ARGS_((int numBits, int *arrayPtr));
  70. extern Boolean      Bit_Intersect _ARGS_((int numBits, int *src1Ptr, int *src2Ptr, int *destPtr));
  71. extern Boolean       Bit_Union _ARGS_((int numBits, int *src1Ptr, int *src2Ptr, int *destPtr));
  72. extern Boolean       Bit_AnySet _ARGS_((int numBits, int *maskPtr));
  73. extern int        *Bit_Expand _ARGS_((int newNumBits, int oldNumBits, int *oldBitPtr));
  74.      
  75. #endif /* _BIT */
  76.